package cn.skyclass.utils
{
	import mx.collections.ArrayCollection;
	
	/**
	 * 集合工具类，提供常用的对集合的操作
	 */
	public class CollectionUtil
	{
		/**
		 * 从一个列表中将某个数据项移动到另一个列表中。
		 * 若任何一个参数为 null，则此方法不做任何处理；
		 * 若源列表中不存在指定的项值，则此方法不做任何处理。
		 * @param fromList 源列表，操作成功后，源列表中的数据项将被移除
		 * @param toList 目标列表
		 * @param item 要移动的数据项
		 * @param newItemIndex 数据项在目标列表中的放置位置，默认为 -1，表示放在最后
		 */		 
		public static function moveItem(fromList:ArrayCollection, toList:ArrayCollection, 
			item:Object, newItemIndex:int=-1):void{
				
			if(!fromList || !toList || !item){ return; }
			
			var i:int = fromList.getItemIndex(item);
			if(i >= 0){
				fromList.removeItemAt(i);
				
				if(!toList.contains(item)){
					if(newItemIndex >= 0 && newItemIndex <= toList.length){
						toList.addItemAt(item, newItemIndex);
					}else{
						toList.addItem(item);
					}
				}
			}
		}
		
		/**
		 * 从一个列表中移除某个数据项
		 * @param list 列表对象
		 * @param item 需要移除的数据项
		 * @return 是否移除成功，若指定的数据项在列表中存在，则移除之并返回 true，否则返回 false
		 */		
		public static function removeItem(list:ArrayCollection, item:Object):Boolean{
			if(!list || !item){ return false; }

			var i:int = list.getItemIndex(item);
			if(i >= 0){
				list.removeItemAt(i);
				return true;
			}
			return false;
		}
		
		/**
		 * 复制一份和源列表包含数据项相同的列表
		 */
		public static function clone(sourList:ArrayCollection):ArrayCollection{
			if(sourList == null){ return null; }
			
			var out:ArrayCollection = new ArrayCollection();
			for each(var o:Object in sourList){
				out.addItem(o);
			}
			return out;
		}
		
	}
}